/**
 * 检查当前环境是否为微信浏览器
 * @returns {boolean} 如果是微信浏览器则返回true,否则返回false
 */
export const isWeiXin = (): boolean => {
  const userAgent = navigator.userAgent.toLowerCase()
  return /micromessenger/i.test(userAgent) || 'wxuserAgent' in navigator
}

/**
 * 检查给定的手机号码是否有效
 * 支持中国大陆、台湾、香港和澳门的手机号码格式
 *
 * @param mobile 要检查的手机号码字符串
 * @returns 如果手机号码格式有效则返回true,否则返回false
 */
export const checkMobile = (mobile: string): boolean => {
  const regexPatterns = [
    /^1[3-9]\d{9}$/, // 中国大陆
    /^(\+?886|0)?9\d{8}$/, // 台湾
    /^(\+?852|0)?[5689]\d{7}$/, // 香港
    /^(\+?853|0)?6[68]\d{5}$/ // 澳门
  ]

  return regexPatterns.some((regex) => regex.test(mobile))
}

/** 1. 根据数组里面每一个的field是唯一的，如果存在重复的情况下，则进行去重，最后该field整个对象使用最后一个的内容
 *  第二功能，如果第二个参数传递了，则根据第二个参数数组的顺序进行排序
 * **/
export const processOptions = (options: any[], order?: string[]): any[] => {
  // 去重：保留最后一个出现的对象
  const uniqueOptions = options.reduce((acc, current) => {
    const index = acc.findIndex((item: any) => item.field === current.field)
    if (index !== -1) {
      acc[index] = current // 覆盖已有的对象
    } else {
      acc.push(current)
    }
    return acc
  }, [] as any[])
  // 排序：根据 order 数组的顺序
  if (order) {
    uniqueOptions.sort((a: any, b: any) => {
      const indexA = order.indexOf(a.field)
      const indexB = order.indexOf(b.field)
      return indexA - indexB
    })
  }

  return uniqueOptions
}

/** 数组里面选出某一项
 *  第二功能，如果第二个参数传递了，则根据第二个参数数组的顺序进行排序
 * **/
export const findOptionByField = (options: any[], fieldName: string): any | undefined => {
  return options.find((option) => option.field === fieldName)
}
